查看原文
其他

【社区之星】专访徐宜生:坚决不做代码搬运工!

CSDN 2018-11-13


徐宜生(博客),毕业于上海海事大学网络工程专业,为了学习到更多技术知识,从对日外包公司跳槽至TCL工作,目前主要负责国外一些移动运营商的手机系统订制工作。在进入TCL工作之前,工作内容与Android没有太大的关系,所以基本上都是在自学Android知识。到TCL后,能够接触到开发系统的系统层,他表示在公司学到的要比自学学的更好更快。


对技术感兴趣的同学,最好不要进日企


CSDN:请和大家介绍下你和目前所从事的工作,以及你的学习经历。


徐宜生:大家好,我是徐宜生,是一个热爱编程、喜欢分享的极客,毕业于上海海事大学网络工程专业。在大学期间就喜欢上了编程带给自己的成就感,热衷于钻研技术,从最早接触的Java EE到后来的Android,一直都是兴趣在驱使着我学习。我的第一份工作与Android没有太大的关系,所以基本上都是在自学,从最基础的学起,到后面慢慢的做一些项目、实战,一步步走来。现在在TCL,负责对运营商的Android系统进行订制。


CSDN:第一份工作是在对日外包公司,谈下在那的工作情况吧?


徐宜生:由于找工作的时候没有考虑清楚,稀里糊涂就进了一家对日外包公司,对于刚毕业的同学来说,对日外包也还算是一份不错的工作,因为工作不会有太大的技术难度,可以有个缓冲过渡期,让你慢慢适应走向社会。日本公司有一个很大的特点就是流程特别规范,在那可以接触到完整的开发流程,每一个阶段、每一个项目,都会有很详细的文档资料,而且公司对文档资料的要求也特别严。所以,对那些想要学日语或者对技术不是很感兴趣的同学来说,进日企也是一个不错的选择。


但是,那些对技术感兴趣的同学,最好不要进这样的公司。因为对日项目一般都会用日本人自己搭建的框架,你要做的就是用这个框架去照着日本人给的例子去写,甚至有些项目的详细设计也是日本人做好的,你要做的就只是把他详细设计里面的伪代码翻译成代码,而它核心的逻辑、框架,你根本接触不到。这样的话,你就是个真正的码农,一个代码搬运工。而且,日企的技术一般都很落后,基本上不会用很新的技术,几乎都是在维护之前做过的东西。所以,对那些想要提高自身技术的程序员们,就不要考虑来这样的公司了。也正是因为这样,我选择了离职。


CSDN:为什么会跳槽至TCL,现在主要负责什么工作?


徐宜生:在对日外包工作了一年多时间后,我越来越觉得,如果继续在这里待下去,不仅技术得不到积累,也是在荒废时间。因此在这里也建议学弟学妹们以我为前车之鉴,在选工作的时候,一定要先认清自己的兴趣方向。程序员这样一个行业,如果没有兴趣,那真的很难有进步空间。


离职到TCL后,主要负责国外一些移动运营商的手机系统订制工作,目前在Framework Team,负责维护、修改工厂用的测试软件、解决Framework层的一些技术问题等。


学东西要知其然,也要知其所以然


CSDN:听说你大学的时候专业是网络工程,而现在从事编程工作,你是如何处理这种转变的呢?


徐宜生:其实大学对专业的区分度也不是太大,毕竟都是计算机专业,学的东西也有很多相同的地方,所以这里也想对那些大学的新生讲,不要因为进了自己不喜欢的专业就不努力学习,大学学习的重点是教会学习的方法和方向。像我,大学学的网络专业,让我对网络有了比较清晰的认识,这对网络编程来说也是很有帮助的。


CSDN:据我的了解,在开发系统方面,你自学的都是在应用层,到TCL后接触到更多的都是系统层,其中有哪些心得值得与我们分享?


徐宜生:嗯,要学一门技术,首先要学会使用它,因此,在自学的时候,肯定要从它的应用层开始,然后再慢慢的去深入了解,知其然,然后知其所以然。到TCL后,公司把我分到Framework Team,后来感觉这样挺好,因为在应用层我自学了那么长时间,基本上也都了解(不敢说精通),最起码知道方向。这样写应用,就好比搭积木,Android提供了各种各样的积木,但你只是单纯的会用,却不知道它是如何实现的。好奇心是人的天性,相信大家在用Android的控件去实现某个效果的时候,一定也会去想,它是怎么实现的呢?从另一个角度来说,就像高中背物理公式一样,老师不会给你一个公式让你去背去用,而是先给你推导一遍,这样就算你忘了公式,自己也能很快推导出来。其实编程也是一样,因为你不可能把所有的东西都记住,就像今天在流行Android 4.4,明天也许就流行L了,虽然它一直在变,但思想不会有太大变化,就像许多大牛说的,编程语言的原理都是一样的,只要精通一门,再学习其他语言就很轻松了。


所以说,不管是上层开发者还是底层开发者,如果能了解一些原理技巧,对工作、自身知识的掌握,都是很有帮助的。其实,我们并不要求每一个上层开发者都能像老罗那样对底层如数家珍,只要知道大致的流程分析、实现原理后,你的技术能力肯定会更上一层楼。


CSDN:在TCL工作,能学到更多的开源框架技术么?会不会遇到什么问题?


徐宜生:大公司在项目上一般不会用太多现成的框架,但在项目管理和开发上,会使用框架,比如代码搜索引擎用OpenGrok;版本管理工具Git用Gerrit;内部论坛用WordPress。在项目方面,由于我们是直接与国外运营商接轨,所以应用层的开发不是太多,也就用不到现在市面上很多开源项目。


刚接触手机系统开发的时候,确实会遇到很多问题,特别是像我这样之前以应用层为主的开发者,就像我前面说的那样,多看看底层,深度理解设计思想和实现过程是很有必要的。刚开始看的时候或许会比较吃力,需要多请教同事,多和同事讨论,才能找到解决的方法。有时,不妨也和硬件的同事们打下交道,因为术业有专攻,从他们身上总能学到很多知识。此外,自己也要多查资料。


开源的本质是交流,我们要多分享


CSDN:听说你模仿了两款Android游戏(2048和拼图),并开发一款仿iOS Assistanttouch的工具,现在在做公司的内部培训辅助系统。在研发过程中又遇到什么问题,又有哪些收获?


徐宜生:有想法的时候,一定要去做,不能想的太多,动手做才是最重要的,当然,构思项目架构、逻辑关系,这些还是需要要的。但只有在实践中,才能最大程度的调动知识储备,才能知道自己在哪方面掌握的还不够。以前自己做Android项目的时候,遇到的最大问题就是UI设计的问题,对于没有美工的程序员来说,这个一直都是泪点。


技术上的难点,基本上通过各类文档、API DOC都能找到相应的解决办法,没有什么技术上的创新,只是一个对知识的沉淀、积累的过程。写这些项目的目的是在于把所学到的知识运用到实际中去,完成对知识的积累,加深自己的理解。而像现在在给公司内部做的这样一个培训系统来说,就不能像以前自己做项目那样完全按照自己的想法来做,你要听取其他人的意见和建议,而且整个项目的流程、逻辑也需要更多的推敲、完善,相比前面几个项目,业务上的逻辑更多、更复杂了。


CSDN:能否谈下你对开源的理解,以及对国内开源技术和产品的看法?


徐宜生:人就是站在前人的肩膀上不断进步的,开源才是技术进步的第一动力,与他人分享技术、经验,不仅可以让你学到别人的经验,更能让你的项目更加的完善,毕竟一个人的能力、思维是有限的,大家一起帮你改善,反过来你的项目又帮助了更多的人,就是这样一种方式,才促使技术不断的进步。


但国内外对开源的理解可能不太一样,毕竟在中国,版权问题都还没能好好解决,而且很多公司也都处于保守的观念中,这跟国内外的文化差异也是很有关系的,他们认为自己创造的东西凭什么白给别人,这样做当然没有错,但你看特斯拉,它也开源了他们的专利,就目前而言,好像自己的研究成果都白给了别人,但长期来看,最终受益的肯定还是他们,它引导了一个行业,并在开源的基础上吸纳了更多,这样进步的速度肯定大于它闭门造车的进步速度。


曾有大牛说过,代码无用,思想无价。我们不能一辈子做伸手党,也要学会回馈,开源的本质就是交流,你学了新的东西,当你有新的发现的时候,也要交给更多的人,这才是开源的精神所在。


初学者不要学习太多开源框架,要打好基础


CSDN:对初学开源框架的程序员,你有哪些建议?


徐宜生:我的建议是先不要学习太多太复杂的开源框架,把基础的东西打好,如果你对Android本身都不是很熟悉,那么研究这些框架你会很吃力,而且也会让你越学越摸不着头脑,框架这个东西,是为了简化开发过程、降低程序耦合度才创造出来的,所以你必须有一定要有足够的代码量,只有写的多了,才知道为什么要偷懒,才知道人家这样设计的好处是什么,特别是当你也想到了这样的思路时候,那么在它的参考下,不仅是给你指明了方向,更给你铺平了道路。


另外,建议大家在阅读开源框架的源码的时候,可以由总体到局部,再由局部到整体的方式来看,先了解整个框架运行的流程、架构,再去看相应的模块是如何实现的,最后再把这些结合起来,看作者是如何设计这些架构的,这样才能学到他的精髓,如果只是一味的去用而不去思考,那么你就很难有所创新了,最后还是那句话,不管学什么框架,都是这一句话--RTFSC(Read the f**king souce code)。


CSDN:为什么会钻研Andbase开源框架和UI控件呢?


徐宜生:其实每个程序员都会有很多未完成的项目,有时候有了一些idea,就想去做,但是每次都要从头做起,在你实现自己的idea之前,需要做很多实现idea以外的工作,比如搭建UI的界面,就算是最简单的滑动Tab之类的,也要写好几个类,然后还有数据库的操作辅助类,常用的工具辅助类,然后才开始写自己的核心逻辑,其实前面这很多东西每个项目都是要经过的,当你做这些事情做多了之后,也就想偷偷懒了,所以那个时候我也在思考,如何来做一个框架来简化这些工作,后来就在网上找到了一些实现的方法,其中,Andbase这个框架跟我的思路最为相近,所以自然而然就开始学习他的思路和方法。当然,这样的框架还有很多,Afinal也是一个不错的例子,这些框架需要你对整个Android架构有一定的了解的基础上才能去好好研究,当然,当你研究多了,对整个Android的了解和自己的能力都会起到很大的帮助。


在应用层,其实UI是非常重要的一件事,在你实战过几个项目后,逻辑处理这方面,就已经基本都能实现了,这时候你再看你做的app,你就会发现,最大的一个问题就是丑,而且交互差,所以,很自然的你就想去改善你的UI了,而且,UI框架也是Android中很重要的一环。因此,研究UI的开源组件,你不仅可以改善你自己的界面设计,而且还能让你看见别人的创意,更能让你学到很多Android UI相关的知识,这些东西都是最上层的交互,更能体现技术是如何用于实践、如何表达创意的。


其他


CSDN:你业余时间会做什么?研究新技术?


徐宜生:业余时间会写一些博客,把最近学到的、总结的新知识沉淀下来,在与他人分享的同时,也学习别人的分享。周末会给自己放个假,好好的休息下。不过有时候有想做的App,也会加班加点、通宵达旦的去做,毕竟兴趣是最好的老师,在兴趣的驱动下,才有动力。


CSDN:最后,CSDN博客对你在成长的道路上,给你提供了哪些帮助?


徐宜生:从最早接触编程开始,就听说CSDN是一个神奇的网站,在上面总能找到你想要的资料。特别是在大学里,很多同学做毕业设计、课程设计,都会在上面下载Demo。那时候看着很多大牛写的博客,感觉十分崇拜。因此,在工作后,我就把CSDN当做一个积累、沉淀、分享和学习的地方。在写博客时,你只有很清晰地去理解这些知识,才能将其写出,所以,你写的每一篇博文,都是代表你对知识的又一次巩固,这对提高自身的能力是很有帮助的,在分享的同时,你还能学到他人的知识,何乐而不为呢?


本文为CSDN原创文章,点击“阅读原文”可查看全文并参与讨论。


如果您喜欢这篇文章,请点击右上角“…”将本文分享给你的朋友。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存